package com.play2gether;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Created by Raul on 29/03/14.
 */
public class PerfilEditarActivity0 extends ActionBarActivity implements View.OnClickListener, AdapterView.OnItemSelectedListener {

    public String id_usuario;

    public  Button             btAceptar;
    public  TextView           txtNombre;
    public  TextView           txtFecha;
    public  TextView           txtApodo;
    public RadioGroup          rdgSexo;
    public Spinner             spCiudad;
    public  Spinner            spPais;
    public  Spinner            spVives;

    public String nombre;
    public String fecha;
    public String sexo;
    public String apodo;
    public int ciudad;
    public int pais;
    public int vives;

    public SharedPreferences   preferencias;

    private DataBaseManager    db;
    public String[] datos;
    private Cursor cursor;
    public String url;

    List<String> list;

    //Botones para el navbar
    public Button btFormularioNV;
    public Button btSugerenciaNV;
    public Button btOpcionesNV;
    public Button btLogoNV;
    public String[] estado;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.editar_perfil);

        url = "http://mediadomeprojects.com/arkdyanbyte/play2gether/public/usuario";
        //Clase para la base de datos
        db = new DataBaseManager(this);

        preferencias  = getSharedPreferences("sesion", Context.MODE_PRIVATE);
        id_usuario    = preferencias.getString("id","");

       //Llenar las variables con los elementos del layout
        txtNombre = (TextView) findViewById(R.id.inputNombre);
        txtFecha = (TextView) findViewById(R.id.inputFecha);
        txtApodo = (TextView) findViewById(R.id.inputApodo);
        rdgSexo = (RadioGroup) findViewById(R.id.rdgSexo);
        spCiudad = (Spinner) findViewById(R.id.spinnerCiudad);
        spPais = (Spinner) findViewById(R.id.spinnerPais);
        spVives = (Spinner) findViewById(R.id.spinnerVivesCon);
        btAceptar = (Button) findViewById(R.id.btGuardar);



        btAceptar.setOnClickListener(this);

        cargarCiudades();
        cargarPaises();
        cargarVives();
        cargarDatos();
        //spCiudad.setOnItemSelectedListener(this);

        //String valorItem = mySpinner.getSelectedItem().toString();

        //Navbar
        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        actionBar.setCustomView(R.layout.navbar);

        TextView tituloNav = (TextView) findViewById(R.id.tituloLayout);
        tituloNav.setText("Edicion perfil");
        //Botones para el navbar
        btFormularioNV = (Button) findViewById(R.id.btFormularioNV);
        btSugerenciaNV = (Button) findViewById(R.id.btSugerenciaNV);
        btOpcionesNV   = (Button) findViewById(R.id.btOpcionesNV);
        btLogoNV       = (Button) findViewById(R.id.btLogoNV);
        estado = utilidades.obtenerEstado(id_usuario, this);
        if (!estado[0].equals("2")){
            btFormularioNV.setAlpha(0);
            btSugerenciaNV.setAlpha(0);
        }else{
            btFormularioNV.setOnClickListener(this);
            btSugerenciaNV.setOnClickListener(this);
        }
        btOpcionesNV.setOnClickListener(this);
        btLogoNV.setOnClickListener(this);

    }
    private void cargarDatos(){
        Bundle bundle = getIntent().getExtras();
        nombre    = bundle.getString("nombre");
        fecha    = bundle.getString("fecha");
        sexo    = bundle.getString("sexo");
        ciudad    = bundle.getInt("ciudad");
        pais    = bundle.getInt("pais");
        vives    = bundle.getInt("vives");
        apodo    = bundle.getString("apodo");

        txtNombre.setText(nombre);
        txtFecha.setText(fecha);
        txtApodo.setText(apodo);
        if (sexo.equals("m"))    { rdgSexo.check(R.id.radioMujer); }
        else if (sexo.equals("h")) { rdgSexo.check(R.id.radioHombre); }

    }

    private void cargarCiudades() {
        Cursor cursorCiudad = db.ObtenerCiudad_Pais_Vives("ciudad");
        ArrayAdapter<String> adapter;
        Set<String> set = new HashSet<String>();
        if (cursorCiudad.moveToFirst()) {
            do {
                set.add(cursorCiudad.getString(1));
            } while (cursorCiudad.moveToNext());
        }
        cursorCiudad.close();
        List<String> list = new ArrayList<String>(set);

        adapter = new ArrayAdapter<String>(PerfilEditarActivity0.this,
                android.R.layout.simple_spinner_item, list);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spCiudad.setAdapter(adapter);
        spCiudad.setWillNotDraw(false);
    }
    private void cargarPaises() {
        Cursor cursorPais = db.ObtenerCiudad_Pais_Vives("pais");
        ArrayAdapter<String> adapter;
        Set<String> set = new HashSet<String>();
        if (cursorPais.moveToFirst()) {
            do {
                set.add(cursorPais.getString(1));
            } while (cursorPais.moveToNext());
        }
        cursorPais.close();
        List<String> list = new ArrayList<String>(set);

        adapter = new ArrayAdapter<String>(PerfilEditarActivity0.this,
                android.R.layout.simple_spinner_item, list);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spPais.setAdapter(adapter);
        spPais.setWillNotDraw(false);
    }
    private void cargarVives() {
        Cursor cursorVives = db.ObtenerCiudad_Pais_Vives("vives_con");
        ArrayAdapter<String> adapter;
        Set<String> set = new HashSet<String>();
        if (cursorVives.moveToFirst()) {
            do {
                set.add(cursorVives.getString(1));
            } while (cursorVives.moveToNext());
        }
        cursorVives.close();
        List<String> list = new ArrayList<String>(set);

        adapter = new ArrayAdapter<String>(PerfilEditarActivity0.this,
                android.R.layout.simple_spinner_item, list);

        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spVives.setAdapter(adapter);
        spVives.setWillNotDraw(false);
    }
    @Override
    public void onItemSelected(AdapterView<?> parent, View v, int position,
                               long id) {
        String name = parent.getItemAtPosition(position).toString();
        showToast("You Selected Item :: " + name);
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {

    }

    private void showToast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    }

        @Override
    public void onClick(View v) {
            Intent intent;

            switch (v.getId()) {

                //Botones para el natvar
                case R.id.btLogoNV:
                    finish();
                    break;
                case R.id.btFormularioNV:
                    //Intent intentF = new Intent(IndiceKamasutraActivity.this,PerfilActivity.class);
                    //startActivity(intentF);
                    break;
                case R.id.btSugerenciaNV:
                    //Intent intentS = new Intent(IndiceKamasutraActivity.this,PerfilActivity.class);
                    //startActivity(intentS);
                    break;
                case R.id.btOpcionesNV:
                    mostrarOpciones();
                    break;
                case R.id.btGuardar:
                    try {
                        new ModificarUsuario().execute();
                    } catch (Exception e) {
                        e.printStackTrace();
                        Log.e("ERROR", e.getMessage());
                    }
                    break;
            }





    }
    public class ModificarUsuario extends AsyncTask<Void, Void, JSONObject> {
        //TextView, es el primer dato que se le pasa a doInBackground.
        //El segundo que está en void es el dato que se va actualizar cada vez que se llame al metodo onProgressUpdate(No sobreescrito) para mostrar un mensaje de se está cargando o mostrar una barra de carta
        //El tercero es lo que nos va a devolver. En este caso un String.

        protected void onPreExecute(){ //Aquí se ponen lo que quiero que haga mientras se cargan los datos. Se ejecuta antes de el doInBackground
           // Toast.makeText(getApplicationContext(),"Conectando con el servidor", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected JSONObject doInBackground(Void... JSONObject) { // Segunda función. Nos devuelve el parámetro que viene del post se modificará todo lo gráfico que se hace en primer plano.

            HttpClient cliente = new DefaultHttpClient();
            HttpPost htppost = new HttpPost(url);
            //BufferedReader bfr;
            String text = "Error";
            String result="";
            InputStream is = null;
            JSONObject json = null;

            //Obtener los datos del formulario
            nombre = txtNombre.getText().toString();
            fecha  = txtFecha.getText().toString();
            apodo = txtApodo.getText().toString();

            //int radioButtonId = rdgSexo.getCheckedRadioButtonId();   //Me devuelve un id muy largo
            //String sexo = Integer.toString(radioButtonId);

            //Se obtienen los datos del sexo
            RadioButton h = (RadioButton) findViewById(R.id.radioHombre);
            if (h.isChecked()){ sexo = "h";}
            else              { sexo = "m"; }


            // String sexo = radioButtonId.v

            //Obtengo los items seleccionados de los combos
            String s_ciudad = spCiudad.getSelectedItem().toString();
            String s_pais   = spPais.getSelectedItem().toString();
            String s_vives  = spVives.getSelectedItem().toString();

           //Obtengo los ids de los combos seleccionados (Es provisional)
            ciudad = db.obtenerIdPaisCiudadVives(s_ciudad, "ciudad");
            pais = db.obtenerIdPaisCiudadVives(s_pais, "pais");
            vives = db.obtenerIdPaisCiudadVives(s_vives, "vives_con");



            //Añadir parametros
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("id_usuario",id_usuario));
            params.add(new BasicNameValuePair("nombre",nombre));
            params.add(new BasicNameValuePair("fecha_nacimiento",fecha));
            params.add(new BasicNameValuePair("sexo",sexo));
            params.add(new BasicNameValuePair("id_ciudad",Integer.toString(ciudad)));
            params.add(new BasicNameValuePair("id_pais",Integer.toString(pais)));
            params.add(new BasicNameValuePair("id_vives",Integer.toString(vives)));
            params.add(new BasicNameValuePair("apodo",apodo));

            try {
                htppost.setEntity(new UrlEncodedFormEntity(params));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }

            try {
                HttpResponse respuesta = cliente.execute(htppost);
                HttpEntity entity = respuesta.getEntity();
                is = entity.getContent();
                //text = EntityUtils.toString(entity);
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try{
                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();
            } catch(Exception e){}

            try{
                json = new JSONObject(result);
            }catch(JSONException e){}


            return json;

        }
        protected void onPostExecute(JSONObject json){
            String estado = "";
            String asunto = "";
            String id     = "";
            try {
                estado = (String) json.get("estado");
                if (estado.equals("ok")){
                    db.modificarUsuario0(id_usuario, nombre, fecha, sexo, ciudad, pais, vives, apodo);
                    mostrarAlerta();
                } //Si no salta a la excepción
                asunto = (String) json.get("asunto");
            } catch (JSONException e) {
                Toast.makeText(getApplicationContext(),"No se han modificado los datos!!", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        }
    }
    public void mostrarAlerta(){
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(PerfilEditarActivity0.this);
        alertDialog.setMessage("Datos guardados correctamente");

        alertDialog.setPositiveButton("VOLVER",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // Write your code here to execute after dialog
                        Intent intent = new Intent(PerfilEditarActivity0.this,PerfilActivity.class);
                        finish();
                        startActivity(intent);

                    }
                });

        alertDialog.show();

    }
    //Funciones para navbar
    private void mostrarOpciones(){
        final CharSequence[] items2 = {"Mi perfil", "Configurar mi play2gether", "Cerrar sesión", "Desvincularme de mi pareja", "Sobre play2gether", "Cerrar"};

        AlertDialog.Builder builder2 = new AlertDialog.Builder(this);
        builder2.setTitle("Menu de opciones");
        builder2.setItems(items2, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                dialog.cancel();
                switch(item){
                    case 0: Intent intent = new Intent(PerfilEditarActivity0.this,PerfilActivity.class);
                        startActivity(intent);
                        break;
                    case 1: break;
                    case 2: guardarSesion("0");
                        intent = new Intent(PerfilEditarActivity0.this,loginActivity.class);
                        finish();
                        startActivity(intent);
                        break;
                    case 3: break;
                    case 4: break;
                }
            }
        });
        AlertDialog alert2 = builder2.create();
        alert2.requestWindowFeature(Window.FEATURE_NO_TITLE);
        WindowManager.LayoutParams wmlp2 = alert2.getWindow().getAttributes();
        wmlp2.gravity = Gravity.TOP | Gravity.RIGHT;
        wmlp2.x = 0;   //x position
        wmlp2.y = 124;   //y position
        alert2.show();
    }
    public void guardarSesion(String n){
        preferencias = getSharedPreferences("sesion", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = preferencias.edit();
        editor.putString("activa", n);
        editor.putString("id","");
        editor.commit();
        finish();
    }
}
